// View2D.h
#pragma once
#include "MyGlut.h"
#include "Model.h"
#include "View.h"

using namespace glut;

// Le V de MVC
class View3D: public View {
public:
	//méthode public car le controlleur a besoin de les appelée
	virtual void dessineMiddlePoint(); //dessine un point au centre du plateau permettant de faire une rotation sur le plateau
	virtual void gererProjection() = 0; //gère la projection(zoom, pas zoom, ..)
	virtual void gererLookAt() = 0; //gère le glutLookAt(mode première personne ou pas, ...)
private:
	//attributs
	GLUquadricObj *quadBiere; // Quardric pour dessiner la bière
	static View3D* instance; // Instance de la vue pour le pattern singleton
	virtual void dessinePacman(); // Dessine le PacMan
	virtual void dessineBiere(); // Dessine une bière
	virtual void dessineJackie(); // Dessine la bouteille de Whiskey, Jackie comme "Jack Daniels"
	virtual void dessineGhost(float, float, float); // Dessine la voiture de police dans l'état 1
	virtual void dessineMurInterieur(); //dessine un mur intérieur
	virtual void dessineMurExHor(); //dessine un mur extérieur horizontal
	virtual void dessineMurExVert(); //dessine un mur extérieur vertical
	virtual void dessineCoinExt(int i = 0, int j = 0); //dessiner un coin de mur extérieur(param par défault car il n'est pas tjr nécessaire de les préciser)
	virtual void dessineMurPrison(); //dessine un mur de prison
	virtual void applySmoothPacmanAnimation(float);
	void dessinePacman3DBody(float base);
	void dessinePacman3DArm(float base);
protected:
	virtual void viewPortMiddle() = 0; //view contenant le jeu, sera implémenté par les sous-classes
	virtual void initLights() = 0; //initialise les lumières
	virtual void enableLight(); // allumage de la lumière
	void applySmoothLookAt();
	float pacmanX;
	float pacmanY;
	//Lumière matériel générale
	float mat_specular[4];
	float mat_diffuse[4];
	float mat_ambient[4];
	float mat_shininess[1]; // Pour la avoir un effet de shininess générale

	int dlPacman3D_body; //display list pour stocké le corps du pacman
	int dlPacman3D_arm; //display list pour stocké le bras du pacman

	/*Spot sur light1*/
	float light1_specular[4];
	float light1_direction[3]; // direction du spot
	float light1_ambient[4];
	float light1_diffuse[4]; // donner une couleur jaune au spot
	float light1_position[4]; //position de la source de lumière, positionnelle

	/*lumière sur light2*/
	float light2_specular[4];
	float light2_direction[3]; // direction
	float light2_ambient[4];
	float light2_diffuse[4]; // donner une couleur jaune au spot
	float light2_position[4]; //position de la source de lumière, directionnelle

	View3D();
};
